
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL_ttf.h>
#include "SDL_image.h"
#include "SDL_rotozoom.h"

#define RUTA "/home/pascalizado/biblioteca-curses/alpha/recursos/otono.jpg"

int Inicializar_sdl() {
	/* Tratamos de inicializar la biblioteca SDL */
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
       printf("No se pudo inicializar S %s\n", SDL_GetError());
       return 1;
    }
	 else return 0;
}

SDL_Surface* Cargar_imagen (char* ruta) {
//return SDL_LoadBMP(ruta);
	return IMG_Load(ruta);
}
SDL_Surface* Genero_ventana (SDL_Surface* pantalla,int ancho,int alto,int color,char* titulo_Ventana, int fs) {
	if ( fs == 0 )
		pantalla = SDL_SetVideoMode( ancho, alto, color, SDL_HWSURFACE );
	else pantalla = SDL_SetVideoMode( ancho, alto, color, SDL_FULLSCREEN );
   SDL_WM_SetCaption( titulo_Ventana, titulo_Ventana );
	return pantalla;
}

void Libero_Recurso(SDL_Surface* recurso) {
	SDL_FreeSurface(recurso);
}

void color_fondo(SDL_Surface* pantalla,int r,int g,int b,char *rutaimg) {
	SDL_Surface* fondo;
	SDL_Rect destino;

if (rutaimg=="")
	SDL_FillRect(pantalla, &pantalla->clip_rect, SDL_MapRGB(pantalla->format, r, g, b));
else {
	   double altura,ancho,t;
		
		altura=1.66;
		ancho=1.66;
		fondo= Cargar_imagen(rutaimg);
		
		altura=pantalla->h/fondo->h;
		printf("altura=%lf",altura);
		ancho=pantalla->w/fondo->w;
		printf("ancho=%lf  ",ancho);
//		zoomSurfaceSize 	(fondo->w,fondo->h,ancho,alto,w,h);
 	   fondo=zoomSurface(fondo, ancho,altura, 0);
		SDL_BlitSurface(fondo,NULL,pantalla, &destino);
		
	  }
	SDL_Flip(pantalla);
}

//FUNCIONES DE TXT TTF

TTF_Font* Inicializar_ttf(char* rutattf,int tamanottf) {
	TTF_Init();
	return TTF_OpenFont(rutattf,tamanottf);
}

SDL_Color color_ttf (int r, int g, int b) {
	SDL_Color ttfColor;

	ttfColor.r = r;
	ttfColor.g = g;
	ttfColor.b = b;

	return ttfColor;
}

void printtf(SDL_Surface* pantalla,SDL_Rect fontRect,SDL_Surface* sup_texto, TTF_Font* font, SDL_Color fColor, char *c, int x, int y){

//      sup_texto= TTF_RenderText_Solid(font, c, fColor);
		TTF_SetFontStyle(font, TTF_STYLE_NORMAL);
      sup_texto= TTF_RenderUTF8_Solid(font, c, fColor);
      fontRect.x = x;
      fontRect.y = y;
      SDL_BlitSurface(sup_texto, NULL, pantalla, &fontRect);
      SDL_Flip(pantalla);
}  

void print_italica(SDL_Surface* pantalla,SDL_Rect fontRect,SDL_Surface* sup_texto, TTF_Font* font, SDL_Color fColor, char *c, int x, int y){

//      sup_texto= TTF_RenderText_Solid(font, c, fColor);
		TTF_SetFontStyle(font, TTF_STYLE_ITALIC);
      sup_texto= TTF_RenderUTF8_Solid(font, c, fColor);
      fontRect.x = x;
      fontRect.y = y;
      SDL_BlitSurface(sup_texto, NULL, pantalla, &fontRect);
      SDL_Flip(pantalla);
}  
void printcsombra_italica (SDL_Surface* pantalla, SDL_Rect fontRect, SDL_Surface* sup_txt, TTF_Font* font, SDL_Color fColor_sombra, SDL_Color fColor_txt,char*c, int x, int y, int desfase) {
//	sup_txt= TTF_RenderText_Solid(font,c,fColor_sombra);
	TTF_SetFontStyle(font, TTF_STYLE_ITALIC);
	sup_txt= TTF_RenderUTF8_Solid(font,c,fColor_sombra);
	fontRect.x = x;
	fontRect.y = y;
	SDL_BlitSurface(sup_txt,NULL, pantalla, &fontRect);
//	sup_txt= TTF_RenderText_Solid(font,c,fColor_txt);
	sup_txt= TTF_RenderUTF8_Solid(font,c, fColor_txt);
	fontRect.x = x - desfase;
	fontRect.y = y - desfase;
	SDL_BlitSurface(sup_txt,NULL,pantalla,&fontRect);
	SDL_Flip(pantalla);
}

void printcsombra (SDL_Surface* pantalla, SDL_Rect fontRect, SDL_Surface* sup_txt, TTF_Font* font, SDL_Color fColor_sombra, SDL_Color fColor_txt,char*c, int x, int y, int desfase) {
//	sup_txt= TTF_RenderText_Solid(font,c,fColor_sombra);
	TTF_SetFontStyle(font, TTF_STYLE_NORMAL);
	sup_txt= TTF_RenderUTF8_Solid(font,c,fColor_sombra);
	fontRect.x = x;
	fontRect.y = y;
	SDL_BlitSurface(sup_txt,NULL, pantalla, &fontRect);
//	sup_txt= TTF_RenderText_Solid(font,c,fColor_txt);
	sup_txt= TTF_RenderUTF8_Solid(font,c, fColor_txt);
	fontRect.x = x - desfase;
	fontRect.y = y - desfase;
	SDL_BlitSurface(sup_txt,NULL,pantalla,&fontRect);
	SDL_Flip(pantalla);
}
char* sacar_espacios(char* cadena)
{
	int i,j;
	char* buffer= (char*)malloc(strlen(cadena)+1);
	buffer[0] = '\0';
	if (cadena[0] == '\0')
		return buffer;
   j=0;
	for (i=0;i<strlen(cadena);i++)
		if (!isspace(cadena[i])) {
			buffer[j]=cadena[i];
			j++;
		}
	return buffer;
}

char* a_minuscula(char* cadena)
{
	int i;

	for(i = 0; i<strlen(cadena); i++){
		  cadena[i] = tolower(cadena[i]);
	}

	return cadena;
}

void printparrafo1 (SDL_Surface* pantalla,TTF_Font* tipografia, SDL_Color color_sombra, SDL_Color color_txt, char* txt,int sombra,int tamano_letra,int x, int y, int desfase)
{
	char* buffer =(char*)malloc(sizeof(char)*200);
	int i,dentro_coro,j,c,offset;
	SDL_Rect fontRect;
	SDL_Surface* sup_txt;
	int pausa=1;
	SDL_Event event;

   dentro_coro=0;
	buffer[0]='\0';
	printf("%s", txt);
	offset=1;
	i=0;
	j=0;
	c=txt[i];

	while (c != '\0' ) {
		while ((c != '\n') && (c != '\0')) {
			buffer[j]=txt[i];
			i++, j++;
			c=txt[i];
		}
		buffer[j]='\0';
		printf("buffer: %d\n", buffer[0]); 
		if (strcmp(a_minuscula(sacar_espacios(buffer)),"{coro}")==0)
		{
			color_fondo(pantalla,0,0,255,RUTA);
		     dentro_coro=1;
		}
		else if (sacar_espacios(buffer)[0]=='\0') //corregir para deteccion de estrofa por salto de linea
			   {
				dentro_coro=0;
				while (pausa)
					while( SDL_PollEvent( &event ) ){
						switch( event.type ){
							case SDL_KEYDOWN:
							   {
									switch( event.key.keysym.sym ){
										case SDLK_RIGHT:
										  	pausa=0;										
											break;
										case SDLK_LEFT:
										   printf("PRESIONO IZQUIERDA\n\n\n");
										break;
									}
									break;
								}
						}
					}
				color_fondo(pantalla,0,0,255,RUTA);
		   	pausa=1;
				}
			else
			if (sombra && dentro_coro)
				printcsombra_italica(pantalla,fontRect,sup_txt,tipografia,color_sombra,color_txt,buffer,1,offset,desfase);
			else if (dentro_coro)
					  print_italica(pantalla,fontRect,sup_txt,tipografia,color_txt,buffer,1,offset);
	    		  else
					if (sombra)
						printcsombra(pantalla,fontRect,sup_txt,tipografia,color_sombra,color_txt,buffer,1,offset,desfase);
					else printtf(pantalla,fontRect,sup_txt,tipografia,color_txt,buffer,1,offset);
			offset=offset+tamano_letra+1;

			if (c == '\0') {
			puts("FIN DE TEXTO");
			buffer[j+1]='\n';
			puts(buffer);
			break;
		} else
			puts(buffer);
		i++; j=0;
		c=txt[i];
	}
	
	free(buffer);
}
void printparrafo (SDL_Surface* pantalla,TTF_Font* tipografia, SDL_Color color_sombra, SDL_Color color_txt, char* txt,int sombra,int tamano_letra,int x, int y, int desfase)
{
	char* buffer =(char*)malloc(sizeof(char)*200);
	char* parrafo[930];
	int i,dentro_coro,j,c,offset,imatriz;
	SDL_Rect fontRect;
	SDL_Surface* sup_txt;
	int pausa=1;
	SDL_Event event;

   dentro_coro=0;
	buffer[0]='\0';
	offset=1;
	imatriz=0;
	i=0;
	j=0;
	c=txt[i];

	while (c != '\0' ) {
		while ((c != '\n') && (c != '\0')) {
			buffer[j]=txt[i];
			i++, j++;
			c=txt[i];
		}
		buffer[j]='\0';
	      
		if (c == '\0') {
			puts("FIN DE TEXTO");
			buffer[j+1]='\n';
			//puts(buffer);
			break;
			}
		parrafo[imatriz]=buffer;
		printf("buffer: %d\n", buffer[0]); 		
//		puts(parrafo[imatriz]);
		i++; j=0;imatriz++;
		c=txt[i];
}
	printf("IMATRIZ=%sn\n%s\n\n\n\n\n",parrafo[1],parrafo[2]);
	i=0;
	for (i=0;i<imatriz-1;i++) {
			if (strcmp(a_minuscula(sacar_espacios(parrafo[i])),"{coro}")==0)
				{
			color_fondo(pantalla,0,0,255,RUTA);
		     dentro_coro=1;
		}
		else if (sacar_espacios(parrafo[i])[0]=='\0') //corregir para deteccion de estrofa por salto de linea
			   {
				dentro_coro=0;
				while (pausa)
					while( SDL_PollEvent( &event ) ){
						switch( event.type ){
							case SDL_KEYDOWN:
							   {
									switch( event.key.keysym.sym ){
										case SDLK_RIGHT:
										  	pausa=0;										
											break;
										case SDLK_LEFT:
										   printf("PRESIONO IZQUIERDA\n\n\n");
										break;
									}
									break;
								}
						}
					}
				color_fondo(pantalla,0,0,255,RUTA);
		   	pausa=1;
				}
			else
			if (sombra && dentro_coro)
				printcsombra_italica(pantalla,fontRect,sup_txt,tipografia,color_sombra,color_txt,parrafo[i],1,offset,desfase);
			else if (dentro_coro)
					  print_italica(pantalla,fontRect,sup_txt,tipografia,color_txt,parrafo[i],1,offset);
	    		  else
					if (sombra)
						printcsombra(pantalla,fontRect,sup_txt,tipografia,color_sombra,color_txt,parrafo[i],1,offset,desfase);
					else printtf(pantalla,fontRect,sup_txt,tipografia,color_txt,parrafo[i],1,offset);
			offset=offset+tamano_letra+1;
}
	
	
}
